package model;


/**
 * Clase encargada de verificar el estado de un trabajo cuando recibe una modificacion
 * 
 */
public class ManejadorDeEstados {
	
	private SistemaWeb web;
	
	
	
	/**
	 * CONTRUCTOR
	 * Crea una instancia de la clase 
	 */
	public ManejadorDeEstados(){
		
		
		}
	
	//Getters y setters
	
	public SistemaWeb getWeb() {
		return web;
	}
	public void setWeb(SistemaWeb web) {
		this.web = web;
	}
	

	
	
	/**
	 * Actualiza el trabajo de acuerdo al estado actual de dicho trabajo modificado
	 * @param trabajo
	 */
	public void actualizarEstado(Trabajo trabajo) {
		if (trabajo.getEstadoDeRevision()=="Sin revisar"){
			trabajo.setEstadoDeRevision("Parcialmente revisado"); 
		}
		else if(trabajo.getNotas().size()==3){
			trabajo.setEstadoDeRevision("Revisado");
			this.evaluarCalificaciones(trabajo);
		}
		
	}

	/**
	 * al momento de ser llamado este metodo evalua la nota final del trabajo que ecibe de acuerdo a las notas que tiene
	 * @param trabajo
	 */
	private void evaluarCalificaciones(Trabajo trabajo) {

		int rechazado = 0;
		int aceptadoConModificacion = 0;
		int aceptado = 0;
		for(EstadoDeCorreccion e : trabajo.getNotas()){
			if (e.sumoEnAceptado())
				aceptado++;
			else if (e.sumoEnAceptadoConModificacion()){
				aceptadoConModificacion++;}
			else {rechazado++;}
			}
	    if (rechazado >= 2)
		{trabajo.setNotaFinal(new Rechazado(""));}
		else if((rechazado == 1) && (aceptadoConModificacion == 2)){
			trabajo.setNotaFinal(new Rechazado(""));}
		else {trabajo.setNotaFinal(new Aceptado(""));}
		this.aniadirComentarios(trabajo);
		this.mandarMail(trabajo);
		
	}
	/**
	 * Indica al sistema web que debe enviarle un mail al usuario de un trabajo con la nota final
	 * @param trabajo
	 */
	private void mandarMail(Trabajo trabajo) {
		
		this.getWeb().enviarMail(trabajo.getAutor(), trabajo, trabajo.getNotaFinal());
		
	}
	/**
	 * Añade los comentarios de las notas parciales de cada revisor en la nota final del trabajo
	 * @param trabajo
	 */
	private void aniadirComentarios(Trabajo trabajo) {
		String comentario= "";
		for(EstadoDeCorreccion e : trabajo.getNotas()){
			comentario += e.getComentario() + "\n";
		}
		trabajo.getNotaFinal().setComentario(comentario);
		
		
		
	}

}
